<html><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252"><!-- Created by AOLpress/1.2 --><title>Chip-8 Instruction Set</title><style data-id="immersive-translate-input-injected-css">.immersive-translate-input {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  z-index: 2147483647;
  display: flex;
  justify-content: center;
  align-items: center;
}
.immersive-translate-attach-loading::after {
  content: " ";

  --loading-color: #f78fb6;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  display: block;
  margin: 12px auto;
  position: relative;
  color: white;
  left: -100px;
  box-sizing: border-box;
  animation: immersiveTranslateShadowRolling 1.5s linear infinite;

  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-2000%, -50%);
  z-index: 100;
}

.immersive-translate-loading-spinner {
  vertical-align: middle !important;
  width: 10px !important;
  height: 10px !important;
  display: inline-block !important;
  margin: 0 4px !important;
  border: 2px rgba(221, 244, 255, 0.6) solid !important;
  border-top: 2px rgba(0, 0, 0, 0.375) solid !important;
  border-left: 2px rgba(0, 0, 0, 0.375) solid !important;
  border-radius: 50% !important;
  padding: 0 !important;
  -webkit-animation: immersive-translate-loading-animation 0.6s infinite linear !important;
  animation: immersive-translate-loading-animation 0.6s infinite linear !important;
}

@-webkit-keyframes immersive-translate-loading-animation {
  from {
    -webkit-transform: rotate(0deg);
  }

  to {
    -webkit-transform: rotate(359deg);
  }
}

@keyframes immersive-translate-loading-animation {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(359deg);
  }
}

.immersive-translate-input-loading {
  --loading-color: #f78fb6;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  display: block;
  margin: 12px auto;
  position: relative;
  color: white;
  left: -100px;
  box-sizing: border-box;
  animation: immersiveTranslateShadowRolling 1.5s linear infinite;
}

@keyframes immersiveTranslateShadowRolling {
  0% {
    box-shadow: 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  12% {
    box-shadow: 100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  25% {
    box-shadow: 110px 0 var(--loading-color), 100px 0 var(--loading-color),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  36% {
    box-shadow: 120px 0 var(--loading-color), 110px 0 var(--loading-color),
      100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0);
  }

  50% {
    box-shadow: 130px 0 var(--loading-color), 120px 0 var(--loading-color),
      110px 0 var(--loading-color), 100px 0 var(--loading-color);
  }

  62% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color),
      120px 0 var(--loading-color), 110px 0 var(--loading-color);
  }

  75% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      130px 0 var(--loading-color), 120px 0 var(--loading-color);
  }

  87% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color);
  }

  100% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0);
  }
}

.immersive-translate-toast {
  display: flex;
  position: fixed;
  z-index: 2147483647;
  left: 0;
  right: 0;
  top: 1%;
  width: fit-content;
  padding: 12px 20px;
  margin: auto;
  overflow: auto;
  background: #fef6f9;
  box-shadow: 0px 4px 10px 0px rgba(0, 10, 30, 0.06);
  font-size: 15px;
  border-radius: 8px;
  color: #333;
}

.immersive-translate-toast-content {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.immersive-translate-toast-hidden {
  margin: 0 20px 0 72px;
  text-decoration: underline;
  cursor: pointer;
}

.immersive-translate-toast-close {
  color: #666666;
  font-size: 20px;
  font-weight: bold;
  padding: 0 10px;
  cursor: pointer;
}

@media screen and (max-width: 768px) {
  .immersive-translate-toast {
    top: 0;
    padding: 12px 0px 0 10px;
  }
  .immersive-translate-toast-content {
    flex-direction: column;
    text-align: center;
  }
  .immersive-translate-toast-hidden {
    margin: 10px auto;
  }
}

.immersive-translate-modal {
  display: none;
  position: fixed;
  z-index: 2147483647;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgb(0, 0, 0);
  background-color: rgba(0, 0, 0, 0.4);
  font-size: 15px;
}

.immersive-translate-modal-content {
  background-color: #fefefe;
  margin: 10% auto;
  padding: 40px 24px 24px;
  border: 1px solid #888;
  border-radius: 10px;
  width: 80%;
  max-width: 270px;
  font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu",
    "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
    "Segoe UI Symbol", "Noto Color Emoji";
  position: relative;
}

@media screen and (max-width: 768px) {
  .immersive-translate-modal-content {
    margin: 50% auto !important;
  }
}

.immersive-translate-modal .immersive-translate-modal-content-in-input {
  max-width: 500px;
}
.immersive-translate-modal-content-in-input .immersive-translate-modal-body {
  text-align: left;
  max-height: unset;
}

.immersive-translate-modal-title {
  text-align: center;
  font-size: 16px;
  font-weight: 700;
  color: #333333;
}

.immersive-translate-modal-body {
  text-align: center;
  font-size: 14px;
  font-weight: 400;
  color: #333333;
  word-break: break-all;
  margin-top: 24px;
}

@media screen and (max-width: 768px) {
  .immersive-translate-modal-body {
    max-height: 250px;
    overflow-y: auto;
  }
}

.immersive-translate-close {
  color: #666666;
  position: absolute;
  right: 16px;
  top: 16px;
  font-size: 20px;
  font-weight: bold;
}

.immersive-translate-close:hover,
.immersive-translate-close:focus {
  color: black;
  text-decoration: none;
  cursor: pointer;
}

.immersive-translate-modal-footer {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 24px;
}

.immersive-translate-btn {
  width: fit-content;
  color: #fff;
  background-color: #ea4c89;
  border: none;
  font-size: 16px;
  margin: 0 8px;
  padding: 9px 30px;
  border-radius: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

.immersive-translate-btn:hover {
  background-color: #f082ac;
}
.immersive-translate-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.immersive-translate-btn:disabled:hover {
  background-color: #ea4c89;
}

.immersive-translate-cancel-btn {
  /* gray color */
  background-color: rgb(89, 107, 120);
}

.immersive-translate-cancel-btn:hover {
  background-color: hsl(205, 20%, 32%);
}

.immersive-translate-action-btn {
  background-color: transparent;
  color: #ea4c89;
  border: 1px solid #ea4c89;
}

.immersive-translate-btn svg {
  margin-right: 5px;
}

.immersive-translate-link {
  cursor: pointer;
  user-select: none;
  -webkit-user-drag: none;
  text-decoration: none;
  color: #007bff;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
}

.immersive-translate-primary-link {
  cursor: pointer;
  user-select: none;
  -webkit-user-drag: none;
  text-decoration: none;
  color: #ea4c89;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
}

.immersive-translate-modal input[type="radio"] {
  margin: 0 6px;
  cursor: pointer;
}

.immersive-translate-modal label {
  cursor: pointer;
}

.immersive-translate-close-action {
  position: absolute;
  top: 2px;
  right: 0px;
  cursor: pointer;
}

.imt-image-status {
  background-color: rgba(0, 0, 0, 0.5) !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 16px !important;
}
.imt-image-status img,
.imt-image-status svg,
.imt-img-loading {
  width: 28px !important;
  height: 28px !important;
  margin: 0 0 8px 0 !important;
  min-height: 28px !important;
  min-width: 28px !important;
  position: relative !important;
}
.imt-img-loading {
  background-image: url("");
  background-size: 28px 28px;
  animation: image-loading-rotate 1s linear infinite !important;
}

.imt-image-status span {
  color: var(--bg-2, #fff) !important;
  font-size: 14px !important;
  line-height: 14px !important;
  font-weight: 500 !important;
  font-family: "PingFang SC", Arial, sans-serif !important;
}

@keyframes image-loading-rotate {
  from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}
</style></head>
<body>
<p>
  </p><hr>
<h1>
  Chip 8 instruction set
</h1>
<p>
(all values in Hexadecimal unless stated)
  </p><hr>
<p>
The Chip-8 instruction set runs in 4k of memory (addresses 000 - FFF). Programs
start at 200, memory before that containing the chip-8 interpreter on a real
1802 based machine. The screen is 64 x 32 (128 x 64 on superchip) and is
monochrome. Their is a sound buzzer
</p><p>
There are 16 primary registers, called v0 - vf. vf is used for carries and
borrows and shouldn't really be used as a general purpose register. There
is a 12 bit index register called I. There is a program counter and stack
pointer, but neither of these are accessible from program code.
</p><p>
There are 2 counters, the sound timer and the delay timer. Both count down
at about 60Hz (on Chip8 they count down in threes using the PC's 18.2Hz Clock).
When the sound timer is non-zero the buzzer sounds.
</p><p>
This is the Chip-8 Instruction set as I understand it....
</p><p>
<table border="1" cellpadding="2">
  <tbody><tr>
    <td>
      Code
    </td>
    <td>
      Assembler
    </td>
    <td>
      Description
    </td>
    <td>
      Notes
    </td>
  </tr>
  <tr>
    <td>
      00Cx
    </td>
    <td>
      scdown x
    </td>
    <td>
      Scroll the screen down x&nbsp;lines
    </td>
    <td>
      Super only, not implemented
    </td>
  </tr>
  <tr>
    <td>
      00E0
    </td>
    <td>
      cls
    </td>
    <td>
      Clear the screen
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      00EE
    </td>
    <td>
      rts
    </td>
    <td>
      return from subroutine call
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      00FB
    </td>
    <td>
      scright
    </td>
    <td>
      scroll screen 4 pixels right
    </td>
    <td>
      Super only,not implemented
    </td>
  </tr>
  <tr>
    <td>
      00FC
    </td>
    <td>
      scleft
    </td>
    <td>
      scroll screen&nbsp;4 pixels left
    </td>
    <td>
      Super only,not implemented
    </td>
  </tr>
  <tr>
    <td>
      00FE
    </td>
    <td>
      low
    </td>
    <td>
      disable extended screen mode
    </td>
    <td>
      Super only
    </td>
  </tr>
  <tr>
    <td>
      00FF
    </td>
    <td>
      high
    </td>
    <td>
      enable extended screen mode (128 x 64)
    </td>
    <td>
      Super only&nbsp;
    </td>
  </tr>
  <tr>
    <td>
      1xxx
    </td>
    <td>
      jmp xxx
    </td>
    <td>
      jump to address xxx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      2xxx
    </td>
    <td>
      jsr xxx
    </td>
    <td>
      jump to subroutine at address xxx
    </td>
    <td>
      16 levels maximum
    </td>
  </tr>
  <tr>
    <td>
      3rxx
    </td>
    <td>
      skeq vr,xx
    </td>
    <td>
      skip if register r =&nbsp;constant
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      4rxx
    </td>
    <td>
      skne vr,xx
    </td>
    <td>
      skip if register r&nbsp;&lt;&gt; constant
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      5ry0
    </td>
    <td>
      skeq vr,vy
    </td>
    <td>
      skip f register r = register y
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      6rxx
    </td>
    <td>
      mov vr,xx
    </td>
    <td>
      move constant to register r
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      7rxx
    </td>
    <td>
      add vr,vx
    </td>
    <td>
      add constant to register r
    </td>
    <td>
      No carry generated
    </td>
  </tr>
  <tr>
    <td>
      8ry0
    </td>
    <td>
      mov vr,vy
    </td>
    <td>
      move register vy into vr
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry1
    </td>
    <td>
      or rx,ry
    </td>
    <td>
      or register vy into register vx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry2
    </td>
    <td>
      and rx,ry
    </td>
    <td>
      and register vy into register vx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry3
    </td>
    <td>
      xor rx,ry
    </td>
    <td>
      exclusive or register ry into register rx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry4
    </td>
    <td>
      add vr,vy
    </td>
    <td>
      add register vy to vr,carry in&nbsp;vf
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry5
    </td>
    <td>
      sub vr,vy
    </td>
    <td>
      subtract register vy from vr,borrow in&nbsp;vf
    </td>
    <td>
      vf set to 1 if borroesws
    </td>
  </tr>
  <tr>
    <td>
      8r06
    </td>
    <td>
      shr vr
    </td>
    <td>
      shift register vy right, bit 0 goes into&nbsp;register vf
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      8ry7
    </td>
    <td>
      rsb vr,vy
    </td>
    <td>
      subtract register vr from register vy, result in vr
    </td>
    <td>
      vf set to 1 if borrows
    </td>
  </tr>
  <tr>
    <td>
      8r0e
    </td>
    <td>
      shl vr
    </td>
    <td>
      shift register vr left,bit 7 goes into register&nbsp;vf
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      9ry0
    </td>
    <td>
      skne rx,ry
    </td>
    <td>
      skip if register rx &lt;&gt; register ry
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      axxx
    </td>
    <td>
      mvi xxx
    </td>
    <td>
      Load index register with constant xxx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      bxxx
    </td>
    <td>
      jmi&nbsp;xxx 
    </td>
    <td>
      Jump to address xxx+register v0
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      crxx
    </td>
    <td>
      rand vr,xxx &nbsp;&nbsp;
    </td>
    <td>
      vr = random number less than or&nbsp;equal to xxx
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      drys
    </td>
    <td>
      sprite rx,ry,s
    </td>
    <td>
      Draw sprite at screen location rx,ry height s
    </td>
    <td>
      Sprites stored in memory at location in index register, maximum 8&nbsp;bits
      wide. Wraps around the screen. If when drawn, clears a pixel, vf is&nbsp;set
      to 1 otherwise it is zero. All drawing is xor&nbsp;drawing (e.g. it toggles
      the screen pixels
    </td>
  </tr>
  <tr>
    <td>
      dry0
    </td>
    <td>
      xsprite rx,ry
    </td>
    <td>
      Draws extended sprite at screen location rx,ry
    </td>
    <td>
      As above,but sprite is always 16 x&nbsp;16. Superchip only, not
      yet&nbsp;implemented
    </td>
  </tr>
  <tr>
    <td>
      ek9e
    </td>
    <td>
      skpr k
    </td>
    <td>
      skip if key (register rk) pressed
    </td>
    <td>
      The key is a key number, see the chip-8 documentation
    </td>
  </tr>
  <tr>
    <td>
      eka1
    </td>
    <td>
      skup k
    </td>
    <td>
      skip if key (register rk) not pressed
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr07
    </td>
    <td>
      gdelay vr
    </td>
    <td>
      get delay timer into&nbsp;vr
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr0a
    </td>
    <td>
      key vr
    </td>
    <td>
      wait for for keypress,put key in register vr
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr15
    </td>
    <td>
      sdelay vr
    </td>
    <td>
      set the delay timer to vr
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr18
    </td>
    <td>
      ssound vr
    </td>
    <td>
      set the sound timer to vr
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr1e
    </td>
    <td>
      adi vr
    </td>
    <td>
      add register vr to the index register
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
      fr29
    </td>
    <td>
      font vr
    </td>
    <td>
      point I to the sprite for hexadecimal character in vr 
    </td>
    <td>
      Sprite is 5 bytes high
    </td>
  </tr>
  <tr>
    <td>
      fr30
    </td>
    <td>
      xfont vr
    </td>
    <td>
      point I to the sprite for hexadecimal character in vr
    </td>
    <td>
      Sprite is 10 bytes high,Super only
    </td>
  </tr>
  <tr>
    <td>
      fr33
    </td>
    <td>
      bcd vr
    </td>
    <td>
      store the bcd representation of register vr at location I,I+1,I+2
    </td>
    <td>
      Doesn't change I
    </td>
  </tr>
  <tr>
    <td>
      fr55
    </td>
    <td>
      str v0-vr
    </td>
    <td>
      store registers v0-vr at location I onwards
    </td>
    <td>
      I&nbsp;is incremented to point to&nbsp;the next location on. e.g. I&nbsp;=
      I + r + 1
    </td>
  </tr>
  <tr>
    <td>
      fx65
    </td>
    <td>
      ldr v0-vr
    </td>
    <td>
      load registers v0-vr from location I onwards
    </td>
    <td>
      as above.
    </td>
  </tr>
</tbody></table>
</p><p>
  </p><hr>
<p>
<a href="http://members.aol.com/chip8/release/index.htm">Chip 8 Index Page</a>
</p></body><div id="immersive-translate-popup" style="all: initial"></div></html>